const translate = require('./translate.js');
/**
 * Excel文件里面的数据定义
 */
class ExcelData {
  //#region 类属性
  /**
   * 公司Id，-1表示新增，空白或者查询不到的要爆错
   */
  companyId = null;
  /**
   * 公司名称
   */
  companyName = '';
  /**
   * 公司地址
   */
  address = '';
  /**
   * 联系电话
   */
  phone = '';
  /**
   * 货品列表，货品数据的数组
   */
  goodsList = [];
  //#endregion

  /**
  * 把包含richText的对象转换为字符串
  * @param {object} value 包含richText的对象
  */
  getValue(value) {
    if (!value) return '';
    const arr = value.richText;
    if (!arr) return '';
    let str = '';
    for (let i = 0; i < arr.length; i++) {
      str += arr[i].text;
    }
    return str;
  }
  /**
   * 获取数字货字符串的值，如果都不是就返回null
   */
  getStringOrNumber(value) {
    if (!value) return null;
    if (typeof value == 'string' || typeof value == 'number') return value;
    else if (value.richText) { return value.richText[0].text; }
    else return null;
  }
  /**
   * 根据Excel Row数据获取公司基本信息，基本信息在第二行
   * @param {excel.Row} row Excel Row数据
   **/
  async getCompanyInfo(row) {
    //获取公司Id
    this.companyId = this.getStringOrNumber(row.getCell(1)?.value);
    this.companyName = this.getStringOrNumber(row.getCell(2)?.value);
    this.companyName = await translate(this.companyName);
    this.address = this.getStringOrNumber(row.getCell(3)?.value);
    this.address=await translate(this.address);
    this.phone = this.getStringOrNumber(row.getCell(4)?.value);
  };
  /**
    * 根据Excel Row数据获取获取货品信息，并添加到货品列表
   * @param {excel.Row} row Excel Row数据
   */
  addGoodsInfo(row,rowNumber) {
    const goodsData = new GoodsData();    
    goodsData.goodsKeyword = this.getStringOrNumber(row.getCell(1)?.value);
    goodsData.goodsQuantity = this.getStringOrNumber(row.getCell(2)?.value);
    goodsData.priceUnit = this.getStringOrNumber(row.getCell(3)?.value);
    goodsData.goodsPrice = parseFloat(this.getStringOrNumber(row.getCell(4)?.value));
    goodsData.rowNumber = rowNumber;
    this.goodsList.push(goodsData);
  }
}

/**
 * 货品数据定义
 */
class GoodsData {
  /**
   * 当前Excel行号,用于回写
   */
  rowNumber = 0;
  /**
  * 到速卖通里面货品搜索的关键词
  */
  goodsKeyword = '';
  /**
   * 货品价格，这个值就是要添加的商品的价格
   */
  goodsPrice = 0;
  /**
   * 货品数量，这个值*10就是要添加的商品库存量
   */
  goodsQuantity = '';
  /**
   * 价格单位
   */
  priceUnit = 'piece';
}

module.exports = {
  /**
 * Excel文件里面的数据定义
 */
  excelData: new ExcelData(),
  /**
 * 货品数据定义
 */
  goodsData: new GoodsData()
}